#include "MainView.h"

MainView::MainView(Ui::plotterClass plotterUi) 
{
	ui = plotterUi;
 
	/// Connecty odpowiedzialne za otwieranie pliku
	connect(ui.openFileBar,SIGNAL(triggered()), this, SLOT(chooseFile()));
	connect(ui.openFileMenu,SIGNAL(triggered()), this, SLOT(chooseFile()));

	/// Connecty odpowiedzialne za zapisywanie pliku
	connect(ui.saveAsMenu, SIGNAL(triggered()), this, SLOT(savePlot()));

	/// Connecty odpowiedzialne za nawigacje punktow na wykresie
	connect(ui.pointTrackingMenu, SIGNAL(triggered()), this, SLOT(pointTracking()));

	/// Connect odpowiedzialny za zadokowanie okien do ostatniej pozycji w widoku glownym
	connect(ui.dockMenu, SIGNAL(triggered()), this, SLOT(redock()));

	/// Connecty odpowiedzialny za uaktywnienie przycisku dokowania okien
	connect(ui.plotDockWidget, SIGNAL(topLevelChanged(bool)), this, SLOT(resetDockMenu()));
	//TODELETE	connect(ui.pointsDockWidget, SIGNAL(topLevelChanged(bool)), this, SLOT(resetDockMenu()));
	
	connect(ui.settingsDockWidget, SIGNAL(topLevelChanged(bool)), this, SLOT(resetDockMenu()));

	///obiekt wyswietlajacy nazwy plikow na status barze
	_fileNameHint = new QLabel();
	ui.statusBar->addPermanentWidget(_fileNameHint);
}


void MainView::SetModel(MainModel* model)
{
	_model = model;
}

void MainView::chooseFile()
{
	QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),"",tr("Files (*.*)"));

	emit fileOpened(fileName);
}

void MainView::savePlot()
{
	/// filter bedzie zawieral rozszerzenie, ktore zostalo wybrane przez usera w oknie dialogowym
	QString filter;	
	QString fileType( "JPEG file (*.jpeg);;" 
		"PNG file (*.png)");

	QString fileName = QFileDialog::getSaveFileName(this,tr("Save Image"),"",fileType,&filter);

	emit plotSaved(fileName,filter);
}

void MainView::pointTracking()
{
	 //nawigacja punktow. If wykonywna po klikniecu - zatem isChecked() = true, akcja jest dopiero teraz podejmowana
	if(ui.pointTrackingMenu->isChecked())
		emit pointTrackingSettings();	
	else
	{
		ui.pointTrackingMenu->setChecked(false);
		emit updatePointPicker();
	}
}

void MainView::updateView()
{
	/// pobieramy z modelu nazwe/komunikat, ktory aktualnie wyswietlamy na pasku na dole
 	_fileNameHint->setText(_model->getLoadedFileName());

	/// umozliwiam  zapisywania i ustawiania property narysowanego wykresu
	ui.menuGraph->setEnabled(true);
	ui.saveAsMenu->setEnabled(true);

	///po narysowaniu wykresu wlaczamy opcje do ustawiania property wykresu
	ui.menuPlot->setEnabled(true);
}

void MainView::resetView()
{
	/// pobieramy z modelu nazwe/komunikat, ktory aktualnie wyswietlamy na pasku na dole
 	_fileNameHint->setText(_model->getLoadedFileName());

	/// uniemozliwiam  zapisywania i ustawiania property narysowanego wykresu
	ui.menuGraph->setEnabled(false);
	ui.saveAsMenu->setEnabled(false);

	///po zamknieciu wykresu wylaczamy opcje do ustawiania property wykresu
	ui.menuPlot->setEnabled(false);
}

void MainView::resetLoadedFileName()
{
	/// potrzebne do zanikania komunikatu po zamknieciu pliku
 	_fileNameHint->setText(_model->getLoadedFileName());
}

void MainView::redock()
{
	ui.plotDockWidget->setFloating(false);
	///TODELETEui.pointsDockWidget->setFloating(false);
	ui.settingsDockWidget->setFloating(false);

	///okna sa zadokowane, wiec akcja dokowania nie jest dostepna
	ui.dockMenu->setEnabled(false);
}

void MainView::resetDockMenu()
{
	ui.dockMenu->setEnabled(true);
}

void MainView::updateStatusBar()
{
	ui.statusBar->showMessage(_model->getStatusBarMessage());
}

void MainView::displayStatusBarMessage()
{
	ui.statusBar->showMessage(QString("Choose left background"));
}

void MainView::uncheckPointPickerAfterFileAction()
{
	ui.pointTrackingMenu->setChecked(false);
}